package com.offcn.webui.controller;

import com.offcn.dycommon.response.AppResponse;
import com.offcn.webui.service.MemberServiceFeign;
import com.offcn.webui.service.ProjectServiceFeign;
import com.offcn.webui.vo.resp.ProjectVo;
import com.offcn.webui.vo.resp.UserRespVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpSession;
import java.util.List;

@Controller
@Slf4j
public class DispathcherController {

    //引入feign调用用户服务的登录接口
    @Autowired
    private MemberServiceFeign memberServiceFeign;

    //引入feign调用项目服务，获取全部项目的接口
    @Autowired
    private ProjectServiceFeign projectServiceFeign;

    @Autowired
    private RedisTemplate redisTemplate;

    //跳转到首页模板
   /* @RequestMapping("/")
    public String toIndex(){


        return "index";
    }*/

    //登录处理方法
    @RequestMapping("/doLogin")
    public String doLogin(String loginacct, String password, HttpSession session){
        AppResponse<UserRespVo> appResponse = memberServiceFeign.login(loginacct, password);

        //获取响应数据
        UserRespVo userRespVo = appResponse.getData();
        //打印输出响应对象
        log.info("当前登录用户:{},密码是:{}",loginacct,password);

        //响应对象
        log.info("远程用户服务响应信息:{}",userRespVo);

        //判断远程登录响应数据是否为空
        if(userRespVo==null){
            //登录失败，跳转到登录页面
            return "redirect:/login.html";
        }

        //如果用户存在，登录成功，把获取到用户数据，存储到session
        session.setAttribute("sessionMember",userRespVo);

        //从当前session获取跳转的地址
        String preUrl = (String) session.getAttribute("preUrl");
        //判断跳转的前缀地址是否存在
        if(StringUtils.isEmpty(preUrl)){
            //前缀不存在，跳转到系统首页
            return "redirect:/";
        }else {
            //如果前缀存在，跳转到前缀地址
            return "redirect:/"+preUrl;
        }

    }

    //登录首页后，读取项目数据
    @RequestMapping("/")
    public String toIndex(Model model){
        //首先尝试从redis缓存读取全部项目集合
     List<ProjectVo> projectVoList= (List<ProjectVo>) redisTemplate.opsForValue().get("projectStr");

     //判断从redis是否读取到项目集合
        if(projectVoList==null){
            //调用项目接口，远程获取全部的项目信息
            AppResponse<List<ProjectVo>> appResponse = projectServiceFeign.all();
            projectVoList=  appResponse.getData();
            //把从远程获取到项目集合数据写入到缓存一份
            redisTemplate.opsForValue().set("projectStr",projectVoList);
        }

        //把读取到的项目集合数据，封装到数据模型
        model.addAttribute("projectList",projectVoList);

        //跳转到首页模板视图
        return "index";
    }


}
